<?php

/**
 * Класс работы с таблицами
 */

class Engine_Db_Table {

    //Имя таблицы
    protected $table;

    //Адаптер по-умолчанию
    protected $adapter      = null;

    //В конструкторе получаем адаптер
    public function __construct() {
        $this->dbAdapter = Application_Bootstrap::getDbAdapter($this->adapter);
    }

    /** Получить строку по id
     * @param int $id
     * @return array
     */
    public function getById ($id) {
        $db = $this->dbAdapter;
        return $db->selectRow('SELECT * FROM `' . $this->table . '` WHERE id = ?', $id);
    }

    /** Получить значение одного поля
     * @param string $field
     * @param string $where
     * @return mixed
     */
    public function getField ($field, $where) {
        $db = $this->dbAdapter;
        return $db->selectCell('SELECT `' . $field . '` FROM `' . $this->table . '` WHERE ' . $where);
    }

    /**
     * Вставить запись в таблицу
     * @param array $row
     * @return int id
     */
    public function insert(array $row) {
        $db = $this->dbAdapter;
        return $db->query( 'INSERT INTO ' . $this->table . '(?#) VALUES(?a)',array_keys($row),array_values($row));
    }

    /** Получить все записи удовлетворяющие условиям
     * @param $where
     * @return mixed
     */
    public function selectAll($where) {
        $db = $this->dbAdapter;
        if (!$where) $where = '1=1';
        return $db->select('SELECT * FROM `' . $this->table . '` WHERE ' . $where);
    }

    /** Get one row
     * @param $where
     * @return mixed
     */
    public function selectRow ($where) {
        $db = $this->dbAdapter;
        return $db->selectRow('SELECT * FROM `' . $this->table . '` WHERE ' . $where);
    }

    /** Обновить запись
     * @param array $data
     * @param $where
     */
    public function update(array $data, $where) {
        $db = $this->dbAdapter;
        return $db->query('UPDATE ?_' . $this->table . ' SET ?a WHERE ' . $where ,$data);
    }

    /** Удаление по условию
     * @param $where
     * @return mixed
     */
    public function delete($where) {
        $db = $this->dbAdapter;
        return $db->query('DELETE FROM `' . $this->table . '` WHERE ' . $where);
    }

    /** Архивируем записи (назначаем statusId = 5)
     * @param $where
     */
    public function archivate ($where) {
        $this->update(array('statusId' => 5 ), $where);
    }

    public function selectCol($column, $where = '1=1') {
        $db = $this->dbAdapter;
        return $db->select('SELECT ' . $column . ' FROM `' . $this->table . '` WHERE ' . $where);
    }

}